from SDES import SDES,Crack
import sys  
from PySide6.QtWidgets import QApplication, QMainWindow  
from SDESGUI_ui import Ui_MainWindow  # 导入生成的 UI 类  
from PySide6.QtCore import Slot

class MainWindow(QMainWindow, Ui_MainWindow):  # 定义主窗口类  
    def __init__(self):  
        super().__init__()  
        self.setupUi(self)  # 初始化 UI  

        # 这里可以添加信号与槽、其他逻辑等  
        self.jiaMi.clicked.connect(self.encipher) 
        self.jieMi.clicked.connect(self.decipher)
        self.getKey.clicked.connect(self.forceCrack)

    @Slot()
    def encipher(self):#加密
        s=self.inputText.text()
        k=self.keyText.text()
        #防止明文或密钥以0开头导致错误
        if isinstance(s,int):
            s=str(bin(s)[2:]).zfill(8)
        if isinstance(k,int):
            k=str(bin(k)[2:]).zfill(10)
        temp=SDES(s,k,1)
        print(temp)
        self.outputText.setText(temp)
    def decipher(self):#解密
        s=self.outputText.text()
        k=self.keyText.text()
        #防止密文或密钥以0开头导致错误
        if isinstance(s,int):
            s=str(bin(s)[2:]).zfill(8)
        if isinstance(k,int):
            k=str(bin(k)[2:]).zfill(10)
        temp=SDES(s,k,2)
        print(temp)
        self.inputText.setText(temp)
    def forceCrack(self):#暴力破解
        s1=self.inputText.text()
        s2=self.outputText.text()
        #防止明文或密文以0开头导致错误
        if isinstance(s1,int):
            s1=str(bin(s1)[2:]).zfill(8)
        if isinstance(s2,int):
            s2=str(bin(s2)[2:]).zfill(8)
        key,time1=Crack(s1,s2,'0000000001','1111111111')
        keyOut=''
        for k in key:
            keyOut+=(k+',')
        self.keyText.setText(keyOut)
        self.time.setText(str(time1))

if __name__ == "__main__":  
    app = QApplication(sys.argv)  # 创建应用程序实例  
    window = MainWindow()  # 创建主窗口实例  
    window.show()  # 显示窗口  
    sys.exit(app.exec_())  # 运行应用程序